#include <iostream>
#include <fstream>
#include <vector>
#include <string>

#include <cstdio> // #include <stdio.h> 用于输入和输出

// Modern C++
// Legacy C++
using namespace std;

// Global variables 全局变量
// 全局变量会自动初始化成默认值
int numbers[100];

int main(int argc, char const *argv[])
{
  // int numbers[5]; 局部变量
  // for (int i = 0; i < 5; ++i) {
  //   printf("%d ", numbers[i]);
  // }
  // for (int i = 0; i < 10; ++i) {
  //   scanf("%d", &numbers[i]);
  // }
  /* code */
  // printf("Hello!\n"); // cout << "Hello" << endl;

  // int a = 1, b = 2;
  // printf("%d + %d = %d\n", a, b, a + b);

  // ifstream ifs("xxxx")
  // cin
  // 一、传统方式的输入、输出
  // scanf("%d %d", &a, &b); // 从键盘读入一个数字，存放到 a 里
  // printf("a = %d b = %d\n", a, b);

  // 二、传统方式的数组
  // 元素的类型 数组的名字[数组的元素个数]
  // int numbers[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // vector<int>
  // numbers[0] = 11;
  // printf("%d", numbers[0]);

  // char chars[5] = {'a', 'b', 'c', 'd', 'e'}; // vector<char>
  // printf("%c\n", chars[0]);

  // 2.1 传统字符串
  // 单纯的字符数组
  // char name[] = "11"; // 字符串 string name {"11"};
  // char *name1 = "11";
  // // scanf("%s", &name);
  // cin.getline(name, 12);
  // printf("name = %s\n", name);
  // char *fruit = "Apple";

  // 3. 常用操作符
  // 十进制 8 -> 二进制 1000
  // 8 >> 1 ->        0100
  // 8 >> 2 ->        0010
  // 8 >> 3 ->        0001
  // >> 按位右移：一个十进制数字，每向右移动 n 位，结果要除以 2^n。
  // << 按位左移：一个十进制数字，每向左移动 n 位，结果要乘以 2^n。
  // 十进制 10 -> 二进制 10100  -> 20
  // 十进制 10 -> 二进制 101000 -> 40
  // 十进制 10 -> 二进制 1010000 -> 80
  // 十进制 10 -> 二进制 10100000 -> 160
  // int n = 10;
  // printf("%d\n", n << 1);

  // ^ 按位异或：通常只用于二进制运算
  int a = 0b1010;
  int b = 0b0111;
  // &: 按位与运算
  // a & b = 0b0010
  // 1 & 1 = 1
  // 其他情况都等于 0
  //
  // 1101
  // |: 按位或运算
  // 只要有一个 1 就是 1
  // a | b = 0b1111
  // int c = a ^ b;
  // printf("c = %d\n", c);


  // 4. char 和 int 的关系
  // 0 - 127 的这个范围里，char 和 int 一一对应的
  char ca = 'A';
  printf("%c\n", ca);
  printf("%d\n", ca);

  char la = 'a';
  printf("%c\n", la);
  printf("%d\n", la);
  return 0;
}
